# class tuple([iterable])
# 可以用多种方式构建元组：
#
# 使用一对圆括号来表示空元组: ()
#
# 使用一个后缀的逗号来表示单元组: a, 或 (a,)
#
# 使用以逗号分隔的多个项: a, b, c or (a, b, c)
#
# 使用内置的 tuple(): tuple() 或 tuple(iterable)
#
# 构造器将构造一个元组，其中的项与 iterable 中的项具有相同的值与顺序。 iterable 可以是序列、支持迭代的容器或其他可迭代对象。 如果 iterable 已经是一个元组，会不加改变地将其返回。 例如，tuple('abc') 返回 ('a', 'b', 'c') 而 tuple( [1, 2, 3] ) 返回 (1, 2, 3)。 如果没有给出参数，构造器将创建一个空元组 ()。

#  构造器将构造一个元组，其中的项与 iterable 中的项具有相同的值与顺序。 iterable 可以是序列、支持迭代的容器或其他可迭代对象。 如果 iterable 已经是一个元组，会不加改变地将其返回。
print(f'{ tuple(["a", "b", "c"]) = }')
print(f'{ tuple(("a", "b", "c")) = }')
print(f'{ tuple(range(3)) = }')
print(f'{ tuple("abc") = }')
print('--------')
print(f'{ tuple(filter(None, [0, 1, 2, 3])) = }')
# 如果没有给出参数，构造器将创建一个空元组 ()。
print('-------')
print(f'{ tuple() = }')

#
# 请注意决定生成元组的其实是逗号而不是圆括号。 圆括号只是可选的，生成空元组或需要避免语法歧义的情况除外。 例如，f(a, b, c) 是在调用函数时附带三个参数，而 f((a, b, c)) 则是在调用函数时附带一个三元组